package blog.mapper;
import java.util.HashMap;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import blog.entity.Article;

/**
 * 文章 
 */
public interface ArticleMapper {

    /**
     * 获得所有的文章
     * @param paramMap 查询条件
     * @return 文章列表
     */
    List<Article> findAll(HashMap<String, Object> paramMap);

    /**
     * 统计文章数量
     * @return 数量
     */
	Integer countArticle();
	
	/**
	 * 统计评论数量
	 * @return 评论数量
	 */ 
	Integer countArticleComment();

	/**
	 * 统计总浏览次数
	 * @return 浏览次数
	 */
	Integer countArticleView();

	/**
	 * 得到最后更新的文章(目前程序中只用到了它的更新日期)
	 * @return 文章
	 */
	Article getLastUpdateArticle();

	/**
	 * 根据id查询文章
	 * @param id 文章ID
	 * @return 文章信息
	 */
	Article getArticleById(Integer id);

	/**
	 * 查询出属于某个分类的前n条文章
	 * @param categoryId 分类ID
	 * @param n 要查出几条
	 * @return 文章列表
	 */
	List<Article> listArticleByCategoryId(@Param("categoryId") Integer categoryId,  @Param("n") Integer  n);

	/**
	 * 查询出访问量最高的前n条文章
	 * @param n 前n条
	 * @return 文章列表
	 */
	List<Article> listArticleByViewCount(Integer n);

	/**
	 * 得到当前文章的下个文章
	 * param articleId 当前这个文章的ID
	 * @return 文章
	 */
	Article getAfterArticle(Integer articleId);

	/**
	 * 得到当前文章的前一个文章
	 * param articleId 当前这个文章的ID
	 * @return 文章
	 */
	Article getPreArticle(Integer articleId);

	/**
	 * 获得随机前n条文章
	 * @param n 要取出的条数
	 * @return 文章列表
	 */
	List<Article> listRandomArticle(int n);

	/**
	 * 获取前n条热评文章
	 * @param n 要取出多少条
	 * @return 文章列表
	 */
	List<Article> listArticleByCommentCount(int n);

	/**
	 * 更新文章
	 * @param article 文章信息
	 */
	void updateArticle(Article article);

	/**
	 * 更新文章的评论数
	 * @param articleId
	 */
	void updateCommentCount(Integer articleId);
}